In [7]:
import numpy as np
import pydensecrf.densecrf as dcrf
from skimage.io import imread, imsave
from pydensecrf.utils import unary_from_labels, create_pairwise_bilateral
from skimage.color import gray2rgb
from skimage.color import rgb2gray
import matplotlib.pyplot as plt
import pandas as pd
from tqdm import tqdm
%matplotlib inline
In [8]:
def rle_decode(rle_mask):
'''
rle_mask: run-length as string formated (start length)
shape: (height,width) of array to return
Returns numpy array, 1 - mask, 0 - background
'''
if rle_mask !=str(np.nan):
s = rle_mask.split()
starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]
starts -= 1
ends = starts + lengths
img = np.zeros(101*101, dtype=np.uint8)
for lo, hi in zip(starts, ends):
img[lo:hi] = 1
return img.reshape(101,101)
In [9]:
df = pd.read_csv('heavy 1*lb822 preds1+preed2.csv')
i = 0
j = 0
plt.figure(figsize=(30,15))
plt.subplots_adjust(bottom=0.2, top=0.8, hspace=0.2) #adjust this to change vertical and horiz. spacings..
# Visualizing the predicted outputs
while True:
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
plt.subplot(1,6,j+1)
plt.imshow(decoded_mask)
plt.title('ID: '+df.loc[i,'id'])
j = j + 1
if j>5:
break
i = i + 1
In [12]:
df = pd.read_csv('0.5*kmike + 0.5*insaf thresh 35 filtered 10.csv')
i = 0
j = 0
plt.figure(figsize=(30,15))
plt.subplots_adjust(bottom=0.2, top=0.8, hspace=0.2) #adjust this to change vertical and horiz. spacings..
# Visualizing the predicted outputs
while True:
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
plt.subplot(1,6,j+1)
plt.imshow(decoded_mask)
plt.title('ID: '+df.loc[i,'id'])
j = j + 1
if j>5:
break
i = i + 1
In [25]:
df = pd.read_csv('heavy 1*lb822.csv')
i = 0
j = 0
plt.figure(figsize=(30,15))
plt.subplots_adjust(bottom=0.2, top=0.8, hspace=0.2) #adjust this to change vertical and horiz. spacings..
# Visualizing the predicted outputs
while True:
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
plt.subplot(1,6,j+1)
plt.imshow(decoded_mask)
plt.title('ID: '+df.loc[i,'id'])
j = j + 1
if j>5:
break
i = i + 1
In [13]:
#Original_image = Image which has to labelled
#Mask image = Which has been labelled by some technique..
def crf(original_image, mask_img):
# Converting annotated image to RGB if it is Gray scale
if(len(mask_img.shape)<3):
mask_img = gray2rgb(mask_img)
# #Converting the annotations RGB color to single 32 bit integer
annotated_label = mask_img[:,:,0] + (mask_img[:,:,1]<<8) + (mask_img[:,:,2]<<16)
# # Convert the 32bit integer color to 0,1, 2, ... labels.
colors, labels = np.unique(annotated_label, return_inverse=True)
n_labels = 2
#Setting up the CRF model
d = dcrf.DenseCRF2D(original_image.shape[1], original_image.shape[0], n_labels)
# get unary potentials (neg log probability)
U = unary_from_labels(labels, n_labels, gt_prob=0.7, zero_unsure=False)
d.setUnaryEnergy(U)
# This adds the color-independent term, features are the locations only.
d.addPairwiseGaussian(sxy=(3, 3), compat=3, kernel=dcrf.DIAG_KERNEL,
normalization=dcrf.NORMALIZE_SYMMETRIC)
#Run Inference for 10 steps
Q = d.inference(10)
# Find out the most probable class for each pixel.
MAP = np.argmax(Q, axis=0)
return MAP.reshape((original_image.shape[0],original_image.shape[1]))
In [14]:
i
Out[14]:
In [31]:
test_path = '../input/test/images/'
"""
visualizing the effect of applying CRF
"""
np.random.seed(1)
nImgs = 4
i = 0
j = 1
plt.figure(figsize=(30,30))
while True:
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
orig_img = imread(test_path+df.loc[i,'id']+'.png')
#Applying CRF on FCN-16 annotated image
crf_output = crf(orig_img,decoded_mask)
plt.subplot(nImgs,4,4*j-3)
plt.imshow(orig_img)
plt.title('Original image')
plt.subplot(nImgs,4,4*j-2)
plt.imshow(np.fliplr(np.rot90(decoded_mask,k=3)))
plt.title('Original Mask')
plt.subplot(nImgs,4,4*j-1)
plt.imshow(np.fliplr(np.rot90(crf_output,k=3)))
plt.title('Mask after CRF')
if j == nImgs:
break
else:
j = j + 1
i = i + 1
plt.tight_layout()
In [11]:
"""
used for converting the decoded image to rle mask
"""
def rle_encode(im):
'''
im: numpy array, 1 - mask, 0 - background
Returns run length as string formated
'''
pixels = im.flatten()
pixels = np.concatenate([[0], pixels, [0]])
runs = np.where(pixels[1:] != pixels[:-1])[0] + 1
runs[1::2] -= runs[::2]
return ' '.join(str(x) for x in runs)
In [12]:
"""
Applying CRF on the predicted mask
"""
for i in tqdm(range(df.shape[0])):
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
orig_img = imread(test_path+df.loc[i,'id']+'.png')
crf_output = crf(orig_img,decoded_mask)
df.loc[i,'rle_mask'] = rle_encode(crf_output)
In [13]:
df.to_csv('815-after crf.csv',index=False)
In [14]:
# delete low masks
df = pd.read_csv('815.csv')
i = 0
j = 0
plt.figure(figsize=(30,15))
plt.subplots_adjust(bottom=0.2, top=0.8, hspace=0.2) #adjust this to change vertical and horiz. spacings..
# Visualizing the predicted outputs
while True:
if str(df.loc[i,'rle_mask'])!=str(np.nan):
decoded_mask = rle_decode(df.loc[i,'rle_mask'])
plt.subplot(1,6,j+1)
plt.imshow(decoded_mask)
plt.title('ID: '+df.loc[i,'id'])
j = j + 1
if j>5:
break
i = i + 1
In [16]:
# delete low masks
df = pd.read_csv('submission 827.csv')
#df['decoded_mask'] = str(np.nan)
j = 0
for i in tqdm(range(df.shape[0])):
if str(df.loc[i,'rle_mask'])!=str(np.nan) and rle_decode(df.loc[i,'rle_mask']).sum() < 40:
df.loc[i,'rle_mask'] = str(np.nan)
df.to_csv('827-after deleted 40.csv',index=False)
In [13]:
df.describe()
Out[13]:
In [11]:
df = pd.read_csv('submission 827.csv')
df.describe()
Out[11]:
In [ ]: